首页 > 试题广场 >

合法IP

[编程题]合法IP
  • 热度指数:242137 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

IPV4地址可以用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此正号不需要出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。

现在需要你用程序来判断IP是否合法。

数据范围:数据组数:
进阶:时间复杂度:,空间复杂度:



输入描述:

输入一个ip地址,保证不包含空格



输出描述:

返回判断的结果YES or NO

示例1

输入

255.255.255.1000

输出

NO
很无语,没加line=line.strip('\n')
import sys


def is_valid_ip(ip):
    parts = ip.split(".")
    if len(parts) != 4:
        return "NO"

    for part in parts:
        if not part.isdigit():
            return "NO"
        if int(part) < 0&nbs***bsp;int(part) > 255:
            return "NO"
        if part != "0" and part[0] == "0":
            return "NO"

    return "YES"


for line in sys.stdin:
    line=line.strip('\n')
    print(is_valid_ip(line))


编辑于 2023-12-16 17:13:40 回复(0)
def fn(s):
    n = len(s)
    num_cnt = 0
    # 双指针
    l=r=0
    while r < n:
        r+=1
        # 如果到达终点,或r指向'.', 检查[l,r])间的元素
        if r == n&nbs***bsp;s[r] == '.':
            if not s[l:r].isdigit(): # 不是数字的话返回
                return "NO"
            if r-l >= 2 and s[l] == '0': # 是数字且两位及以上但首位位为0,返回
                return "NO"

            if not 0<=int(s[l:r])<=255: # 是正常数字但不在正确范围内
                return "NO" 
            # r指向下一位,l指向r
            r+=1
            l=r
            num_cnt+=1

    if num_cnt != 4: # 如果不满或大于4组数字
        return 'NO'
        
    return "YES"

while True:
    try:
        s = input()
        print(fn(s))
    except:
        break

发表于 2023-07-27 13:09:16 回复(0)
tag蛮离谱的一题。。
L=[x for x in input().split('.')]
IP=[]

for x in L:
    if x.isdigit()==True and 0<=int(x)<=255:
        if len(x)>=2 and x[0]=='0':
            break
        else:
            IP.append(x) 
if len(IP)==4:
    print('YES')
else:
    print('NO')

发表于 2023-02-08 20:17:54 回复(0)
while True:
    try:
        str1 = input().split(".")
        str2 = []
        flag = False
        for i in str1:
            if i:
              str2.append(i)
        for i in range(len(str2)):
            if (len(str2[i]) >= 2 and str2[i][0] == '0') or ("+" in str2[i]):
                flag = True
                print('NO')
        if not flag:
            lst = list(map(int,str2))
            if len(lst) == 4:
                count = 0
                for i in range(4):
                    if 0 <= lst[i] < 256:
                        count += 1
                if count == 4:
                    print('YES')
                else:
                    print('NO')      
            else:
                print('NO')
    except:
        break
发表于 2022-09-03 16:15:36 回复(0)
while True:
    try:
        n = input().split('.')
        c = 0
        if len(n) == 4:
            for i in n:
                if i.startswith('0') and len(i)>1:
                    break
                elif i.isdigit() and 0<=int(i)<=255:
                    c +=1
        if c == 4:
            print('YES')
        else:
            print('NO')
    except:
        break
发表于 2022-07-16 23:11:24 回复(0)
import re
try:
    str1 = input()
    str2 = re.match(r'\d+.\d+.\d+.\d+',str1).group()
    list1 = str2.split('.')
    if len(str2) != len(str1):
        print('NO')
    else:
        res = 1
        for i in list1:
            if 0 <= int(i) < 10 and len(i) == 1:
                pass
            elif 10 <= int(i) <= 255:
                pass
            else:
                res = 0
                break
        if res == 1:
            print('YES')
        else:
            print('NO')
except:
    print('NO')

发表于 2022-07-05 20:21:48 回复(0)
ipd = input()

def judge_ip(ipd):
    ipds = ipd.split('.')
    if len(ipds) !=4:
        return False
    for i in ipds:
        if not i.isdigit():
            return False
        if i.startswith('0') and int(i)!=0:
            return False
        if int(i)<0&nbs***bsp;int(i)>255:
            return False
    return True

if judge_ip(ipd):
    print("YES")
else:
    print("NO")

发表于 2022-06-23 22:18:30 回复(0)
while True:
    try:
        a = input().split('.')
        g = 0
        for n in a:
            if n.isdigit():
                if 0<=int(n)<=255:
                    if len(n)>1 and n[0]=='0':
                        break
                    else:
                        g+=1                   
        if g == 4:
            print('YES')
        else:
            print('NO')
    except:
        break
发表于 2022-06-20 13:38:17 回复(0)
while True:   
    try:
        a = input().split('.')
        nums = 0
        for i in a:
            if i.isdigit() and int(i) <= 255 and str(int(i)) == i:
                nums += 1
        if nums == 4:
            print('YES')
        else:
            print('NO')
    except:
        break
发表于 2022-06-17 18:04:37 回复(0)
这里处理字符需要考虑几种情况;
第一种是切片后字符串的长度是不是4,不是就'NO'
第二种是空字符('')
第三种就是字符串前面补0,即('010' )因为要转换成int(整型)来处理它是不是在0<=str<=255

发表于 2022-05-18 23:30:14 回复(0)
继续偷懒:
try :
    ip1, ip2, ip3, ip4 = input().split('.')
    l = [str(x) for x in range(256)]
    if ip1 in l and ip2 in l and ip3 in l and ip4 in l :
        print('YES')
    else :
        print('NO')
except :
    print('NO')
发表于 2022-05-14 00:18:45 回复(0)
ip = input().split(".")
if len(ip) != 4:    # 排除 长度不为4部分的
    print("NO")
    
else:
    flag = 1 # 合法为1
    for i in ip:
        if (
           not i.isdigit()    # 排除不是数字的
          &nbs***bsp;(len(i) > 1 and i[0] == "0")    # 排除首位为0的
          &nbs***bsp;len(i) < 1
          &nbs***bsp;int(i) < 0    # 排除在[0,255]范围外的
          &nbs***bsp;int(i) > 255
        ):
            flag = 0 #flag为0
            print("NO")
            break
        else:
            pass #continue
    if flag:
            print("YES")

发表于 2022-05-13 16:59:17 回复(0)
import re
def s(a):
    if not a :
        return 'YES'
    else:
        if int(a[0]) > 255:
            return 'NO'
        if int(a[0]) <= 255:
            return s(a[1:])

def k(s):
    for data in s:
        if re.match('[^1-9].*',data) != None:
            if data == '0':
                return '1'
            else:
                return '0'
a = input().split('.')
if len(a) == 4:
    if '' in a or k(a) == '0':
        print('NO')
    else:
        print(s(a))
else:
    print('NO')
发表于 2022-05-12 16:50:17 回复(0)
address = input().split('.')

length = len(address)
flag = True
if length != 4:
    flag = False

for i in range(0,length):
    if (not address[i].isnumeric()) or int(address[i]) > 255:
        flag = False
        break
    if address[i] != str(int(address[i])):
        flag = False
        break
        
if flag:
    print('YES')
else:
    print('NO')
发表于 2022-05-07 16:02:19 回复(0)
#不合法的情况:
#输入非数字
#输入数字:不是4个数字,超过255,小于0,非无符号数

s=input().split('.')



for i in s:
    if i.isdecimal():
        if int(i)<0&nbs***bsp;int(i)>255&nbs***bsp;len(s)!=4&nbs***bsp;i!=str(int(i)):
            print('NO')
            break
    elif not i.isdecimal():
        print('NO')
        break
else:
    print('YES')

发表于 2022-04-23 20:36:20 回复(0)
while True:
    try:
        a=input().split('.')
        n = 0
        for i in a:
            if len(i)>1 and i[0]=='0':
                n=0
            elif i.isdigit() and 0 <= int(i) <= 255:
                    n += 1
            else:
                n = 0
        print('YES' if n == 4 else 'NO')
    except:
        break
发表于 2022-04-22 22:34:53 回复(0)